﻿using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;

using FarseerPhysics;
using FarseerPhysics.Dynamics;
using FarseerPhysics.Collision;
using FarseerPhysics.Factories;
using FarseerPhysics.Controllers;

namespace GameDev_Story.Cenas
{
    public class Cena_Jogo
    {
        Texture2D fundo;
        GameWindow Window;
        KeyboardState teclado_atual, teclado_anterior;
        MouseState mouse_atual, mouse_anterior;
        GamePadState joystick_atual, joystick_anterior;
        int timer;
        int timer1;
        int timer2;
        int timer3;
        int timer4;
        Texture2D imagemPlat;

        Objetos.Cleber Cleber;
        Objetos.Chao Chao;
        Objetos.Plataforma plataforma;
        Objetos.Inimigo inimigo;
        Objetos.Montanha montanha;
        Objetos.Nuvens nuvem;

        Vector2 pos = new Vector2(0, 350);
        
        Body mPlatformBody;
        
        public Cena_Jogo(ContentManager Content, GameWindow Window)
        {
            //Create a rectangle platform with a width of 40, height of 3,
            //density of 1, and position at 0, -12
            //Then set the position and rotation

            imagemPlat = Content.Load<Texture2D>("plataforma");
            mPlatformBody = BodyFactory.CreateRectangle(Game1.simulator,imagemPlat.Width, imagemPlat.Height, 1f, pos);
            mPlatformBody.IgnoreGravity = true;
            //mPlatformBody.Rotation = .1f;
           // mPlatformBody.Restitution = 1f;
            //mPlatformBody.IsStatic = true;           
            timer = new int();
            timer1 = new int();
            timer2 = new int();
            timer3 = new int();
            timer4 = new int();
            Chao = new Objetos.Chao(Content.Load<Texture2D>("Chao"));
            
            Cleber = new Objetos.Cleber(Content.Load<Texture2D>("personagem"), Window);
            plataforma = new Objetos.Plataforma(imagemPlat, pos);
            montanha = new Objetos.Montanha(Content.Load<Texture2D>("montanhas"));
            nuvem = new Objetos.Nuvens(Content.Load<Texture2D>("Nuvens"));
            this.Window = Window;
            Cleber.camada = 0.1f;
            //plataforma.camada = 0.2f;
            Chao.camada = 0.9f;
            
            
            //fundo = Content.Load<Texture2D>("jogo");
        }

        public void Update(GameTime gameTime, ContentManager Content)
        {
            Chao.Update(gameTime, teclado_atual, teclado_anterior);
            Cleber.Update(gameTime, teclado_atual, teclado_anterior, joystick_atual, joystick_anterior);
            montanha.Update(gameTime, teclado_atual, teclado_anterior);
            nuvem.Update(gameTime, teclado_atual, teclado_anterior);
            timer += 1;
            timer1 += 2;
            timer2 += 3;
            timer3 += 4;
            timer4 += 5;

            teclado_atual = Keyboard.GetState();
            mouse_atual = Mouse.GetState();
            joystick_atual = GamePad.GetState(PlayerIndex.One);

            if (timer == 300)
            {
                inimigo = new Objetos.Inimigo(Content.Load<Texture2D>("cachorro"));
                Objetos.Inimigo.listaInimigo.Add(inimigo);   
            }

            if (timer1 == 300)
            {
                inimigo = new Objetos.Inimigo(Content.Load<Texture2D>("cachorro"));
                Objetos.Inimigo.listaInimigo.Add(inimigo);
            }

            if (timer2 == 300)
            {
                inimigo = new Objetos.Inimigo(Content.Load<Texture2D>("cachorro"));
                Objetos.Inimigo.listaInimigo.Add(inimigo);
            }

            if (timer3 == 300)
            {
                inimigo = new Objetos.Inimigo(Content.Load<Texture2D>("cachorro"));
                Objetos.Inimigo.listaInimigo.Add(inimigo);
            }

            if (timer4 == 300)
            {
                inimigo = new Objetos.Inimigo(Content.Load<Texture2D>("cachorro"));
                Objetos.Inimigo.listaInimigo.Add(inimigo);
            }

            if (timer >= 300)
            {
                timer = 0;
            }

            if (timer1 >= 300)
            {
                timer1 = 0;
            }

            if (timer2 >= 300)
            {
                timer2 = 0;
            }

            if (timer3 >= 300)
            {
                timer3 = 0;
            }

            if (timer4 >= 300)
            {
                timer4 = 0;
            }
            
            for (int i = 0; i < Objetos.Inimigo.listaInimigo.Count; i++)
            {
                Objetos.Inimigo.listaInimigo[i].Update(gameTime, Cleber.posicao);

                if (Cleber.Bateu(Objetos.Inimigo.listaInimigo[i]))
                {
                    Objetos.Inimigo.listaInimigo.RemoveAt(i);
                    Objetos.Inimigo.listaInimigo[i].visivel = false;
                    if (teclado_atual.IsKeyDown(Keys.F) && !teclado_anterior.IsKeyDown(Keys.F) ||
                        joystick_atual.IsButtonDown(Buttons.B) && !joystick_anterior.IsButtonDown(Buttons.B))
                    {
                        
                    }
                }            
            }
        }

        public void Draw(GameTime gameTime, SpriteBatch spriteBatch)
        {
            Chao.Draw(gameTime, spriteBatch);
            montanha.Draw(gameTime, spriteBatch);
            Cleber.Draw(gameTime, spriteBatch);
            plataforma.Draw(gameTime, spriteBatch);
            nuvem.Draw(gameTime, spriteBatch);
            

            for (int i = 0; i < Objetos.Inimigo.listaInimigo.Count; i++)
            {
                Objetos.Inimigo.listaInimigo[i].Draw(gameTime, spriteBatch, inimigo.andando);
            }
        }

    }
}

